package com.xbongbong.pro.bi.commons.helper;


import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.xbongbong.paas.pojo.BiExplainPojo;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.ListIterator;
import java.util.Map;
import java.util.Objects;

import static com.xbongbong.pro.bi.commons.constant.Constant.OBJTYPE_ARRAY;
import static com.xbongbong.pro.bi.commons.constant.Constant.OBJTYPE_COLLECTION;


/**
 * @author  gzt
 * @Description 集合操作相关的工具类.
 * @Date 14:32 2022/5/26
 **/

public final class CollectionHelper {

    /**
     * 私有构造方法.
     */
    private CollectionHelper() {
        super();
    }

    /**
     * 判断数组是否不为空.
     * @param array 数组
     * @return 布尔值
     */
    public static boolean isNotEmpty(Object[] array) {
        return array != null && array.length > 0;
    }

    /**
     * 判断数组是否不为空.
     * @param list 集合
     * @return 布尔值
     */
    public static boolean isNotEmptyList(List list) {
        return list != null && list.size() > 0;
    }
    /**
     * 判断数组是否不为空.
     * @param list 集合
     * @return 布尔值
     */
    public static boolean isNullList(List list) {
        if (isNotEmptyList(list)){
            return list.size() == 1 && Objects.isNull(list.get(0));
        }else {
            return false;
        }
    }



    /**
     * 判断集合是否为空.
     * @param collections 集合
     * @return 布尔值
     */
    public static boolean isEmpty(Collection<?> collections) {
        return collections == null || collections.isEmpty();
    }

    /**
     * 将对象转成数组，如果对象类型是数组或集合，则直接转换，否则构造成数组.
     * @param obj 对象
     * @param objType 对象类型
     * @return 数组
     */
    public static Object[] toArray(Object obj, int objType) {
        Object[] values;
        switch (objType) {
            case OBJTYPE_ARRAY:
                values = (Object[]) obj;
                break;
            case OBJTYPE_COLLECTION:
                values = ((Collection<?>) obj).toArray();
                break;
            default:
                values = new Object[]{obj};
        }
        return values;
    }


    /**
     * @author  gzt
     * @Description 将原本的LinkedHashMap反转
     * @Date 14:30 2022/5/30
     * @return java.util.Map<java.lang.String,java.lang.Object>
     **/

    public static Map<String, String> reverse(HashMap<String, String> map) {
        ListIterator<Map.Entry<String, String>> iter = new ArrayList<>(map.entrySet()).listIterator(map.size());
        LinkedHashMap<String, String> linkedHashMap = new LinkedHashMap<>();
        while (iter.hasPrevious()) {
            Map.Entry<String, String> entry = iter.previous();
            linkedHashMap.put(entry.getKey(), entry.getValue());
        }
        return linkedHashMap;
    }

    /**
     * 获取map中第一个数据值
     *
     * @param map 数据源
     * @return
     */
    public static BiExplainPojo getFirstOrNull(Map<String, BiExplainPojo> map) {
        BiExplainPojo biExplainPojo = null;
        for (Map.Entry<String, BiExplainPojo> entry : map.entrySet()) {
            biExplainPojo = JSONObject.parseObject(JSON.toJSONString(entry.getValue()),BiExplainPojo.class);
            if (biExplainPojo != null) {
                break;
            }
        }
        return biExplainPojo;
    }

}